package GUI;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import Background.Contestant;
import Background.Judge;
import Background.Lists;
/**
* A class to display the registration window in the gui. Builds the window and displays it.
*
* @author Justin Sorrel
* @version 23 January, 2013
*
*/
@SuppressWarnings("serial")
public class RegistrationGUI extends JFrame
{
/**
* A dimension used in setting the size of the frame.
*/
private static final Dimension MY_SIZE = new Dimension(1000, 500);
/**
* This field is for the Border Layout that contains all my buttons
* for the information stage.
*/
public Container my_info_panel;
/**
* This field creates a flow layout which hold the top buttons in the frame.
*/
public Container my_grid;
/**
* A container to handle the flow layout.
*/
public Container my_flow;
/**
* A text field for holding the first name.
*/
public JTextField my_first_field;
/**
* A text field for holding the last name.
*/
public JTextField my_last_field;
/**
* A text field for holding the email address.
*/
public JTextField my_email_field;
/**
* A text field for holding the confirm email address.
*/
public JTextField my_confirm_field;
/**
* A text field for holding the user's username.
*/
public JTextField my_user_field;
/**
* A text field for holding the phone number.
*/
public JTextField my_number_field;
/**
* A text field for holding the password.
*/
public JPasswordField my_pass_field;
/**
* An int to hold the registration number for a contestant.
*/
public static int registration_number;
/**
* A checkbox that the user can select to indicate they are a contestant.
*/
private JCheckBox my_contestant;
/**
* A checkbox that the user can select to indicate they are a judge.
*/
private JCheckBox my_judge;
/**
* A list to hold the strings of the user's information.
*/
public ArrayList<String> my_list;
/**
* A JPanel for editing the user's information.
*/
private JPanel my_edit_panel;
/**
* Constructor for the RegistrationGUI. Sets the name of the window.
*/
public RegistrationGUI() {
super("REGISTRATION");
my_flow = new JPanel(new FlowLayout());
my_grid = new JPanel(new GridLayout(9,2));
my_info_panel = new JPanel(new BorderLayout());
my_edit_panel = new JPanel(new BorderLayout());
my_list = new ArrayList<String>();
my_first_field = new JTextField();
my_last_field = new JTextField();
my_email_field = new JTextField();
my_confirm_field = new JTextField();
my_user_field = new JTextField();
my_number_field = new JTextField();
my_pass_field = new JPasswordField();
my_contestant = new JCheckBox("Contestant/Attendee");
my_judge = new JCheckBox("Judge");
}
/**
* Method that starts the program and sets up the GUI.
*/
public void start() {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setVisible(true);
setPreferredSize(MY_SIZE);
createInfoGrid();
add(my_info_panel);
remove(my_edit_panel);
validate();
pack();
}
/**
* A method to display the registration window after it's been closed.
*/
public void displayRegistration(){
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setPreferredSize(MY_SIZE);
add(my_info_panel);
setVisible(true);
pack();
}
/**
* Creates the window for the information page. This creates some labels and text
* fields that will capture the user's entered data.
*/
public void createInfoGrid() {
final JButton submit = new JButton("Register Me!");
submit.addActionListener(new SubmitListener());
my_grid.add(new JLabel("First Name:"));
my_grid.add(my_first_field);
my_grid.add(new JLabel("Last Name:"));
my_grid.add(my_last_field);
my_grid.add(new JLabel("Email Address:"));
my_grid.add(my_email_field);
my_grid.add(new JLabel("Confirm Email:"));
my_grid.add(my_confirm_field);
my_grid.add(new JLabel("Phone Number:"));
my_grid.add(my_number_field);
my_grid.add(new JLabel("Username:"));
my_grid.add(my_user_field);
my_grid.add(new JLabel("Password:"));
my_grid.add(my_pass_field);
my_grid.add(new JLabel("Type of User:"));
my_grid.add(new JLabel(""));
my_grid.add(my_contestant);
my_grid.add(my_judge);
my_flow.add(my_grid, BorderLayout.CENTER);
my_info_panel.add(my_flow);
my_info_panel.add(submit, BorderLayout.SOUTH);
}
/**
*
* @param c the Contestant to retrieve information from.
* @author Justin Wong
*/
public void displayEdit(Contestant c){
setVisible(true);
createEditGrid(c);
remove(my_info_panel);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setPreferredSize(MY_SIZE);
add(my_edit_panel);
setVisible(true);
pack();
}
/**
*
* @param c the Contestant to retrieve information from.
* @author Justin Wong
*/
private void createEditGrid(Contestant c){
String name = c.getName();
int space = name.indexOf(' ');
String first_name = name.substring(0, space);
String last_name = name.substring(space + 1, name.length());
my_first_field.setText(first_name);
my_last_field.setText(last_name);
my_email_field.setText(c.getEmail());
my_confirm_field.setText(c.getConfirm());
my_number_field.setText(c.getPhoneNumber());
my_user_field.setText(c.getUserName());
my_pass_field.setText(c.getPassword());
JButton save_changes = new JButton("Save Changes");
save_changes.addActionListener(new SaveChanges(c));
JPanel save_changes_panel = new JPanel(new BorderLayout());
JPanel edit_gird = new JPanel(new GridLayout(9,2));
JPanel edit_flow = new JPanel(new FlowLayout());
edit_gird.add(new JLabel("First Name:"));
edit_gird.add(my_first_field);
edit_gird.add(new JLabel("Last Name:"));
edit_gird.add(my_last_field);
edit_gird.add(new JLabel("Email Address:"));
edit_gird.add(my_email_field);
edit_gird.add(new JLabel("Confirm Email:"));
edit_gird.add(my_confirm_field);
edit_gird.add(new JLabel("Phone Number:"));
edit_gird.add(my_number_field);
edit_gird.add(new JLabel("Username:"));
edit_gird.add(my_user_field);
edit_gird.add(new JLabel("Password:"));
edit_gird.add(my_pass_field);
save_changes_panel.add(save_changes, BorderLayout.EAST);
edit_flow.add(edit_gird, BorderLayout.CENTER);
my_edit_panel.add(save_changes_panel, BorderLayout.SOUTH);
my_edit_panel.add(edit_flow);
}
/**
* Method used to check whether or not the emails match.
* @return True if emails match, otherwise false.
*/
private boolean CheckEmail() {
boolean check = false;
String email = my_email_field.getText();
String confirm = my_confirm_field.getText();
if (email.equals(confirm)) {
check = true;
}
return check;
}
public void resetRegistration() {
my_first_field.setText("");
my_last_field.setText("");
my_email_field.setText("");
my_confirm_field.setText("");
my_user_field.setText("");
my_number_field.setText("");
my_pass_field.setText("");
my_contestant.setSelected(false);
my_judge.setSelected(false);
remove(my_edit_panel);
remove(my_info_panel);
validate();
}
/**
* Inner class to go to the next window in the registration process when
* button is pressed.
* @author Justin Sorrell
*/
class SubmitListener implements ActionListener {
/**
* Action performed method that displays the about message.
* @param the_event The event, ignored.
*/
@Override
public void actionPerformed(final ActionEvent the_event) {
boolean check = true;
if(my_first_field.getText().equals("") || my_last_field.getText().equals("") ||
my_email_field.getText().equals("") || my_confirm_field.getText().equals("") ||
my_number_field.getText().equals("") || my_user_field.getText().equals("") ||
my_pass_field.getPassword().equals("")){
JOptionPane.showMessageDialog(my_info_panel, "One or more fields were left blank.");
}
if(!my_contestant.isSelected() && !my_judge.isSelected()){
check = false;
JOptionPane.showMessageDialog(my_info_panel, "You must select a user type.");
}
if(my_contestant.isSelected() && my_judge.isSelected()){
check = false;
JOptionPane.showMessageDialog(my_info_panel, "You must select only one user type.");
}
if (CheckEmail() && check) {
char[] temp;
my_list.add(my_first_field.getText());
my_list.add(my_last_field.getText());
my_list.add(my_email_field.getText());
my_list.add(my_confirm_field.getText());
my_list.add(my_user_field.getText());
temp = my_pass_field.getPassword();
String password = new String(temp);
my_list.add(password);
my_list.add(my_number_field.getText());
// for testing purposes
System.out.println(my_list);
if (my_contestant.isSelected()) {
submitContestant();
return;
}
if (my_judge.isSelected()){
submitJudge();
return;
}
remove(my_info_panel);
validate();
} else if (!CheckEmail()){
JOptionPane.showMessageDialog(my_info_panel, "The given emails do not match each other.");
}
}
}
/**
* This method handles the case when a contestant/attendee is registering.
*/
private void submitContestant() {
boolean valid = true;
ArrayList<Contestant> contestantList = Lists.getContestantList();
for (Contestant c : contestantList) {
if (c.getUserName().equals(my_list.get(4))) {
valid = false;
}
}
if (valid) {
String name = "";
name = (my_list.get(0) + " " + my_list.get(1));
Contestant c = new Contestant(name, my_list.get(2), my_list.get(3),
my_list.get(4), my_list.get(5), (my_list.get(6)), registration_number);
registration_number++;
c.isContestant = true;
RegistrationGUI r = Main_GUI.getRegistrationGUI();
resetRegistration();
JOptionPane.showMessageDialog(null,
"Congratulations for registering! A contestant who does not make any " +
"entries is considered to be an attendee only.");
r.dispose();
System.out.println("I am a contestant/attendee.");
System.out.println("My name: " + c.getName());
System.out.println("My email: " + c.getEmail());
System.out.println("My phone number: " + c.getPhoneNumber());
System.out.println("My registration number = " + c.getRegistrationNumber());
Lists.saveData();
}
else{
JOptionPane.showMessageDialog(my_info_panel, "A contestant has already registered with " +
" this username");
}
}
/**
* This method handles the case when a judge is registering.
*/
private void submitJudge() {
boolean valid = true;
ArrayList<Judge> judgeList = Lists.getJudgeList();
for (Judge j : judgeList) {
if (j.getUserName().equals(my_list.get(4))) {
valid = false;
}
}
if (valid) {
String name = "";
name = (my_list.get(0) + " " + my_list.get(1));
Judge j = new Judge(name, my_list.get(2), my_list.get(3),
my_list.get(4), my_list.get(5), (my_list.get(6)));
RegistrationGUI r = Main_GUI.getRegistrationGUI();
resetRegistration();
JOptionPane.showMessageDialog(null, "Congratulations for registering!");
r.dispose();
j.isContestant = false;
System.out.println("I am a judge.");
System.out.println("My name: " + j.getName());
System.out.println("My email: " + j.getEmail());
System.out.println("My phone number: " + j.getPhoneNumber());
Lists.saveData();
}
else{
JOptionPane.showMessageDialog(my_info_panel, "A judge has already registered with " +
"this username");
}
}
class SaveChanges implements ActionListener{
private Contestant MY_CONTESTANT;
public SaveChanges(Contestant c){
MY_CONTESTANT = c;
}
@Override
public void actionPerformed(ActionEvent e) {
String first_name = my_first_field.getText();
String last_name = my_last_field.getText();
String email = my_email_field.getText();
String number = my_number_field.getText();
String user_name = my_user_field.getText();
char[] temp = my_pass_field.getPassword();
String password = new String(temp);
ArrayList<Contestant> contestant_list = Lists.getContestantList();
boolean valid_user_name = true;
for(int i = 0; i < contestant_list.size(); i++){
Contestant c = contestant_list.get(i);
String contestant_user_name = c.getUserName();
if(contestant_user_name.equals(user_name)){
valid_user_name = false;
JOptionPane.showMessageDialog(null, "User name: " +
user_name + "already exist");
break;
}
}
if(valid_user_name){
MY_CONTESTANT.setName(first_name + " " + last_name);
MY_CONTESTANT.setEmail(email);
MY_CONTESTANT.setPhoneNumber(number);
MY_CONTESTANT.setPassword(password);
MY_CONTESTANT.setUserName(user_name);
Lists.saveData();
JOptionPane.showMessageDialog(null, "Changes are successful!");
}
}
}
}//close RegistrationGUI